<?php
/* Защитим файл от прямого доступа */
defined('_JEXEC') or die('Restricted access');

/* Теперь создадим класс с названием, которое записали в файле mod_название модуля.php
   (в примере оно было записано так: ModJnameclassHelper) */

class ModJafishaHelper
{
  /* Теперь запишем основную функцию с названием, которое задали в файле mod_название модуля.php (в примере оно было записано так: getNamefunction($params))*/
  function getAfisha ($params)
  {
    /* Тело функции, любой код и все, что необходимо пишем здесь.
       Для того чтобы обратиться к параметру функции (в нашем случае $params), нужно записать такую команду:
       $params->get('имя параметра'). Такая запись будет иметь значение параметра которое задано в настройке
       (администрировании) модуля под соответствующим именем.
       О том какие глобальные параметры еще могут передаваться в модуле поговорим в другой статье, сейчас
       объясняю только механизм работы.

       Главное, что нужно не забыть это в конце функции вернуть нужное значение или массив данных или просто true или false.

       Все условия и обработка должны находиться в теле этой функции.
       Можно создавать дополнительные функции как в теле этой так и вне ее и класса, но результат
       для передачи в Вид, должен находиться в теле этой функции*/

    $db =& JFactory::getDBO();
/* #__jcalpro2_events */
    /* В запросе к времени начала приходится прибавить три часа - этот идиотский календарь хранит всё в UST */
    $sql = "SELECT title, description, short_description, url, day, month, year, WEEKDAY(start_date) as weekday, ".
           "DATE_FORMAT(start_date + INTERVAL 3 HOUR, '%H:%i') AS time ".
           "FROM #__jcalpro2_events WHERE start_date >= NOW() AND published ORDER BY start_date";
    $db->setQuery($sql);
    $rows = $db->loadObjectList();
    /* Разбираем строки ответа и формируем массив для передачи в шаблон вывода */
    if($rows) {
      $i = 0;
      foreach ($rows as $row) {
        $view[$i][date] = $row->day . " " . getGenMonth($row->month) . " " . $row->year;
        $view[$i][weekday] = getWeekDay($row->weekday);
        $view[$i][time] = "начало в " . $row->time;
        $view[$i][title] = $row->title;
        /* если в поле описания встречаются спаны, их надо поменять на font, чтобы не ломать пузырь;
           а если там есть ссылка на билетные кассы, их вовсе нужно выдернуть в линк */
        $description = str_replace("span", "font", $row->description);
        $link = stristr($description,"<a href");
        if ($link) $description = substr($description, 0, strpos($description, "<a href"));
        $view[$i][description] = $description;
        /* в коротком описании меняем <br /> и [br] в разных вариантах начертания на запятую */
        $sh_desc = $row->short_description;
        $sh_desc = preg_replace("/ *[\[<] *br *\/?[\]>] */ui",", ",$sh_desc);
        $view[$i][short_description] = $sh_desc;
        $view[$i][link] = $link;
        $i++;
      }
    } else {
      $view = NULL; // Если ответ БД пустой, передаём в $view[0][title] строчку #NOTDEFINED
    }
    return $view;
  }
}

// Определение месяца в р.п. по номеру
function getGenMonth ($month) {
  /* Массив месяцев в родительном падеже для формирования даты */
  $months = array (1 => 'января', 2 => 'февраля', 3 => 'марта', 4 => 'апреля',
                   5 => 'мая', 6 => 'июня', 7 => 'июля', 8 => 'августа',
                   9 => 'сентября', 10 => 'октября', 11 => 'ноября', 12 => 'декабря');
  return $months [$month];
}

// Определение дня недели по порядковому номеру 0--6
function getWeekDay ($number) {
  $days = array (0 => 'понедельник', 1 => 'вторник', 2 => 'среда', 3 => 'четверг',
                 4 => 'пятница', 5 => 'суббота', 6 => 'воскресенье');
  return $days [$number];
}
?>